<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
      思路：找出数组中的三个元素，需要满足和为0，所以三指针法。
      这题的重点在于去重  -1 -1 1 1 3 5。
      为什么是nums[i]==nums[i-1]呢，因为j是i+1  如果改成nums[i]==nums[i+1]那么就代表了i与j也不能不同，但实际是可以相同的
      */
      var threeSum = function (nums) {
        let result = []
        nums.sort((a, b) => a - b)
        for (let i = 0; i < nums.length; i++) {
          if (nums[i] == nums[i - 1]) continue
          let left = i + 1
          let right = nums.length - 1
          while (left < right) {
            let sum = nums[i] + nums[left] + nums[right]
            if (sum == 0) {
              while (nums[left] == nums[left + 1]) {
                left++
              }
              while (nums[right] == nums[right - 1]) {
                right--
              }
              result.push([nums[i], nums[left], nums[right]])
              left++
              right--
            } else if (sum < 0) {
              left++
            } else {
              right--
            }
          }
        }
        return result
      }
    </script>
  </body>
</html>
